#ifndef QSTACKED_FRAME_BASE_H_
#define QSTACKED_FRAME_BASE_H_

#include <QWidget>
#include <QBaseLib.h>
#include "QWidgetBase.h"

#define QSTACKED_SHOW(x, ...)  ({ \
	QString layout = #x; \
	x *frame = nullptr; \
	if(!isFrameLayoutExist(layout)){ \
		frame = NEW_QWIDGET_BASE(x,m_ManageBase, ##__VA_ARGS__); \
		addFrameLayout(layout,frame); \
	} \
	frame = (x *)showFrameLayout(layout); \
	frame; \
	})



class QStackedManageBase;
class QStackedFrameBase : public QWidgetBase
{
    Q_OBJECT
public:
	/**
     * 初始化构造函数
     *
     * @param -
     * @note -
     * @return -
     */
    explicit QStackedFrameBase(QStackedManageBase *parent = nullptr);
	
	/**
     * 析构函数
     *
     * @param -
     * @note -
     * @return -
     */
    virtual ~QStackedFrameBase();

	/**
     * 显示帧视图
     *
     * @param -
     * @note -
     * @return -
     */
    QStackedFrameBase* showFrameLayout(QString layout);


	/**
     * 添加帧视图
     *
     * @param -
     * @note -
     * @return -
     */
    void addFrameLayout(QString layout,QStackedFrameBase *frameLayout);
	/**
     * 删除帧视图
     *
     * @param -
     * @note -
     * @return -
     */
    bool deleteFrameLayout(QString layout,QString frameLayout = "");

	/**
     * 判断视图是否存在
     *
     * @param -
     * @note -
     * @return -
     */
    bool isFrameLayoutExist(QString layout);

public slots:
	/**
     * 获取页面超时时间(S单位)
     *
     * @param -
     * @note -
     * @return 返回页面超时时间
     */
    virtual int getTimeOut();

	/**
     * 重置超时
     *
     * @param -
     * @note -
     * @return -
     */
    void timeReset();
	
	/**
     * 停止定时器
     *
     * @param -
     * @note -
     * @return -
    */
    void timeStop();

 	/**
      * 超时回调
      *
      * @param -
      * @note -
      * @return -
      */
     virtual void timeOutHander();

public:
    // 帧视图管理类
    QStackedManageBase *m_ManageBase;

};

#endif // QSTACKED_FRAME_BASE_H_
